package com.xydtech.ecard.ecard.controller;

import com.alibaba.fastjson.JSONObject;
import com.xydtech.common.annotation.PassToken;
import com.xydtech.common.model.ResponseModel;
import com.xydtech.common.utils.StringUtils;
import com.xydtech.ecard.config.domain.EcardNewsChannelList;
import com.xydtech.ecard.config.domain.EcardNewsConfig;
import com.xydtech.ecard.config.domain.EcardNewsContentList;
import com.xydtech.ecard.config.service.IEcardNewsChannelListService;
import com.xydtech.ecard.config.service.IEcardNewsConfigService;
import com.xydtech.ecard.config.service.IEcardNewsContentListService;
import com.xydtech.ecard.user.service.IEcardApiUserService;
import com.xydtech.system.service.ISysDeptService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 电子名片-客户经理-首页-今日热点Controller
 *
 * @author Daniel
 * @date 2022-5-10 14:04:04
 */
@Controller
@Api(tags = "电子名片-今日热点")
@RequestMapping("/ecardSaasApi/newsConfig")
public class EcardApiNewsConfigController extends EcardApiBaseController {
    @Autowired
    private ISysDeptService deptService;
    @Autowired
    private IEcardApiUserService ecardApiUserService;
    @Autowired
    private IEcardNewsConfigService ecardNewsConfigService;
    @Autowired
    private IEcardNewsContentListService ecardNewsContentListService;
    @Autowired
    private IEcardNewsChannelListService ecardNewsChannelListService;

    /**
     * 电子名片-今日热点-获取今日热点数据
     *
     * @return
     */
    @PassToken
    @GetMapping("/getTodayHotSpots")
    @ApiOperation(value = "电子名片-今日热点-获取今日热点数据", notes = "电子名片-今日热点-获取今日热点数据")
    @ApiResponses({@ApiResponse(code = 0, message = "OK", response = EcardNewsConfig.class)})
    @ResponseBody
    public ResponseModel getTodayHotSpots(@RequestParam(required = false) String registId) {
        JSONObject jsonObject = new JSONObject();
        String salt = getSalt();//盐值
        /**
         * 需求描述（需求很变态，谨慎食用，别把自己绕晕了，烂代码就是这么来的）：
         * 1. 首先查询管理后台-电子名片中“新闻设置”功能中的“热点频道”和“首页自定义标题”
         * 2. 根据查询结果，获取标题
         *  2.1 如果“首页自定义标题”有值，则直接返回该“首页自定义标题”
         *  2.2 如果“首页自定义标题”为NULL或者为空字符串，则查询管理后台-电子名片-名片新闻中配置的“首页显示”的第一条，如果查询有数据，则直接返回，如果没数据，
         *  则需要再根据1中得到的热点频道在管理后台的“名片新闻”中对应频道下获取第一条
         */
        /*String currentUserId = StringUtils.isEmpty(registId) ? getCurrentUserId() : registId;

        //获取当前用户的信息
        EcardApiUserInfo userInfo = ecardApiUserService.getUserInfo(currentUserId, salt);
        //法人机构信息
        SysDept secondLevelDept = deptService.selectSecondLevelDeptByDeptId(userInfo.getDeptId());
        //获取法人机构的ID
        Long legalManDeptId = secondLevelDept.getDeptId();*/

        //1. 首先查询管理后台-电子名片中“新闻设置”功能中的“热点频道”和“首页自定义标题”
        EcardNewsConfig queryEcardNewsConfigParams = new EcardNewsConfig();
//        queryEcardNewsConfigParams.setDeptId(legalManDeptId);
        queryEcardNewsConfigParams.setSts("1");
        List<EcardNewsConfig> ecardNewsConfigList = ecardNewsConfigService.selectEcardNewsConfigList(queryEcardNewsConfigParams);
        if (ecardNewsConfigList == null || ecardNewsConfigList.size() == 0) {
            jsonObject.put("sts", 0);
            jsonObject.put("msg", "暂未查询到新闻设置信息，请联系系统管理员进行配置！");
            return ResponseModel.ok(jsonObject);
        }
        EcardNewsConfig ecardNewsConfig = ecardNewsConfigList.get(0);
        //查询出来的“热点频道”和“首页自定义标题”
        String channelId = ecardNewsConfig.getChannelId();
        String defineTitle = ecardNewsConfig.getDefineTitle();

        //2.1 如果“首页自定义标题”有值，则直接返回该“首页自定义标题”
        if (!StringUtils.isEmpty(defineTitle)) {
            jsonObject.put("sts", 1);
            jsonObject.put("msg", defineTitle);
            return ResponseModel.ok(jsonObject);
        }

        /**
         * 2.2 如果“首页自定义标题”为NULL或者为空字符串，则查询管理后台-电子名片-名片新闻中配置的“首页显示”的第一条，
         * 如果查询有数据，则直接返回，
         * 如果没数据，则需要再根据1中得到的热点频道在管理后台的“名片新闻”中对应频道下获取第一条
         */
        EcardNewsContentList ecardNewsContentParams = new EcardNewsContentList();
        ecardNewsContentParams.setSts("1");
//        ecardNewsContentParams.setDeptId(legalManDeptId);
        //查询条件为“首页显示”
        ecardNewsContentParams.setIndexSts("T");
        List<EcardNewsContentList> ecardNewsContentList = ecardNewsContentListService.selectEcardNewsContentListList(ecardNewsContentParams);

        if (ecardNewsContentList != null && ecardNewsContentList.size() > 0) {
            //如果查询有数据，则直接返回，
            EcardNewsContentList ecardNewsContent = ecardNewsContentList.get(0);
            jsonObject.put("sts", 1);
            jsonObject.put("msg", ecardNewsContent.getTitle());
            return ResponseModel.ok(jsonObject);
        }

        //如果没数据，则需要再根据1中得到的热点频道在管理后台的“名片新闻”中对应频道下获取第一条
        ecardNewsContentParams.setChannelId(channelId);
        //取消查询条件中的“首页显示”，要按渠道进行查询
        ecardNewsContentParams.setIndexSts(null);

        ecardNewsContentList = ecardNewsContentListService.selectEcardNewsContentListList(ecardNewsContentParams);
        if (ecardNewsContentList != null && ecardNewsContentList.size() > 0) {
            //如果查询有数据，则直接返回，
            EcardNewsContentList ecardNewsContent = ecardNewsContentList.get(0);
            jsonObject.put("sts", 1);
            jsonObject.put("msg", ecardNewsContent.getTitle());
            return ResponseModel.ok(jsonObject);
        } else {
            jsonObject.put("sts", 1);
            jsonObject.put("msg", "暂未查询到名片新闻，请联系系统管理员进行配置！");
            return ResponseModel.ok(jsonObject);
        }
    }


    /**
     * 电子名片-今日热点-获取新闻主页配置信息
     *
     * @return
     */
    @PassToken
    @GetMapping("/getNewsMainPageConfInfo")
    @ApiOperation(value = "电子名片-今日热点-获取新闻主页配置信息", notes = "电子名片-今日热点-获取新闻主页配置信息")
    @ApiResponses({@ApiResponse(code = 0, message = "OK", response = EcardNewsConfig.class)})
    @ResponseBody
    public ResponseModel getNewsMainPageConfInfo(@RequestParam(required = false) String registId) {
        String salt = getSalt();//盐值
        /**
         * 思路：
         * 1. 首先查询当前法人下的新闻设置信息，包含新闻主页显示的Banner、是否“新闻首页显示名片”以及热点新闻最大条数及其他频道显示条数配置信息
         * 2. 查询今日导读数据，查询“名片新闻”中的“热点新闻”状态有开启状态的，则按照1中的“热点新闻最大条数”进行返回，如果查询为空，则根据1中查询出的“热点频道”查询名片新闻中的新闻，最大数量按1中配置的数量进行查询
         * 3. 查询下面的频道数据
         */
//        String currentUserId = StringUtils.isEmpty(registId) ? getCurrentUserId() : registId;
        try {
            Map<String, Object> resultData = new HashMap<>();
            /*//获取当前用户的信息
            EcardApiUserInfo userInfo = ecardApiUserService.getUserInfo(currentUserId, salt);
            //法人机构信息
            SysDept secondLevelDept = deptService.selectSecondLevelDeptByDeptId(userInfo.getDeptId());
            //获取法人机构的ID
            Long legalManDeptId = secondLevelDept.getDeptId();*/

            //1. 首先查询当前法人下的新闻设置信息，包含新闻主页显示的Banner、是否“新闻首页显示名片”以及热点新闻最大条数及其他频道显示条数配置信息
            EcardNewsConfig queryEcardNewsConfigParams = new EcardNewsConfig();
//            queryEcardNewsConfigParams.setDeptId(legalManDeptId);
            List<EcardNewsConfig> ecardNewsConfigList = ecardNewsConfigService.selectEcardNewsConfigList(queryEcardNewsConfigParams);
            if (ecardNewsConfigList == null || ecardNewsConfigList.size() == 0) {
                return ResponseModel.ok("暂未查询到新闻设置信息，请联系系统管理员进行配置！");
            }
            EcardNewsConfig ecardNewsConfig = ecardNewsConfigList.get(0);
            resultData.put("config", ecardNewsConfig);

            //2. 查询今日导读数据，查询“名片新闻”中的“热点新闻”状态有开启状态的，则按照1中的“热点新闻最大条数”进行返回，如果查询为空，则根据1中查询出的“热点频道”查询名片新闻中的新闻，最大数量按1中配置的数量进行查询
            int maxHotNums = ecardNewsConfig.getMaxHotNums();
            EcardNewsContentList ecardNewsContentParams = new EcardNewsContentList();
            ecardNewsContentParams.setSts("1");
//            ecardNewsContentParams.setDeptId(legalManDeptId);
            //查询条件为“热点新闻”
            ecardNewsContentParams.setHotSts("T");
            ecardNewsContentParams.setLimitNums(maxHotNums);
            List<EcardNewsContentList> ecardNewsContentList = ecardNewsContentListService.selectEcardNewsContentListList(ecardNewsContentParams);
            if (ecardNewsContentList != null && ecardNewsContentList.size() > 0) {
                //如果有数据，直接返回
                resultData.put("hotNews", ecardNewsContentList);
            } else {
                //如果查询为空，则根据1中查询出的“热点频道”查询名片新闻中的新闻，最大数量按1中配置的数量进行查询
                String hotChannelId = ecardNewsConfig.getChannelId();
                //清空是否热点新闻的控制
                ecardNewsContentParams.setHotSts(null);
                //设置ChannelID获取名片新闻
                ecardNewsContentParams.setChannelId(hotChannelId);
                ecardNewsContentList = ecardNewsContentListService.selectEcardNewsContentListList(ecardNewsContentParams);
                resultData.put("hotNews", ecardNewsContentList);
            }

            //查询其他渠道新闻
            EcardNewsChannelList ecardNewsChannelListParams = new EcardNewsChannelList();
//            ecardNewsChannelListParams.setDeptId(legalManDeptId);
            ecardNewsChannelListParams.setSts("1");
            List<EcardNewsChannelList> ecardNewsChannelList = ecardNewsChannelListService.selectEcardNewsChannelListList(ecardNewsChannelListParams);
            //清空是否热点新闻的控制
            ecardNewsContentParams.setHotSts(null);
            ecardNewsContentParams.setLimitNums(ecardNewsConfig.getMaxOtherNums());
            for (EcardNewsChannelList ecardNewsChannel : ecardNewsChannelList) {
                String otherChannelId = ecardNewsChannel.getChannelId();
                //设置ChannelID获取名片新闻
                ecardNewsContentParams.setChannelId(otherChannelId);
                ecardNewsChannel.setEcardNewsContentList(ecardNewsContentListService.selectEcardNewsContentListList(ecardNewsContentParams));
            }
            resultData.put("otherChannelNews", ecardNewsChannelList);

            return ResponseModel.ok(resultData);
        } catch (Exception ex) {
            return ResponseModel.error("数据异常，请刷新后重试！");
        }
    }

    /**
     * 电子名片-今日热点-获取新闻详情页面内容
     *
     * @return
     */
    @PassToken
    @GetMapping("/getNewsDeatilInfo/{id}")
    @ApiOperation(value = "电子名片-今日热点-获取新闻详情页面内容", notes = "电子名片-今日热点-获取新闻详情页面内容")
    @ApiResponses({@ApiResponse(code = 0, message = "OK", response = EcardNewsContentList.class)})
    @ResponseBody
    public ResponseModel getNewsDeatilInfo(@PathVariable("id") Long id) {
        return ResponseModel.ok(ecardNewsContentListService.selectEcardNewsContentListById(id));
    }
}
